import fs from 'fs';
import path from 'path';
import { getServerSession } from 'next-auth/next';
import { authOptions } from './auth/[...nextauth]';

// 获取文档目录下的所有markdown文件
export default async function handler(req, res) {
  try {
    if (req.method === 'GET') {
      const { filePath } = req.query;
      
      // 如果没有指定文件路径，返回所有markdown文件列表
      if (!filePath) {
        const docsDir = path.join(process.cwd());
        const files = [];
        
        // 递归获取所有.md文件
        function getMarkdownFiles(dir) {
          const items = fs.readdirSync(dir);
          
          items.forEach(item => {
            const fullPath = path.join(dir, item);
            const relativePath = path.relative(process.cwd(), fullPath);
            const stat = fs.statSync(fullPath);
            
            if (stat.isDirectory() && item !== 'node_modules' && item !== '.git' && item !== '.next') {
              getMarkdownFiles(fullPath);
            } else if (stat.isFile() && item.endsWith('.md') && item !== 'README.md') {
              // 读取文件的第一行作为文档介绍
              try {
                const content = fs.readFileSync(fullPath, 'utf8');
                let description = '';
                
                // 获取第一行内容作为描述
                const lines = content.split('\n');
                // 查找第一个非空行
                for (let i = 0; i < lines.length; i++) {
                  const line = lines[i].trim();
                  if (line) {
                    // 如果是标题行，去掉#号及其后面的空格
                    if (line.startsWith('#')) {
                      // 匹配出所有的#号及其后面的空格
                      const match = line.match(/^#+\s*/);
                      if (match) {
                        description = line.substring(match[0].length);
                      } else {
                        description = line;
                      }
                    } else {
                      description = line;
                    }
                    break;
                  }
                }
                
                files.push({
                  path: relativePath,
                  name: item,
                  lastModified: stat.mtime,
                  description: description
                });
              } catch (error) {
                console.error(`Error reading file ${fullPath}:`, error);
                files.push({
                  path: relativePath,
                  name: item,
                  lastModified: stat.mtime,
                  description: ''
                });
              }
            }
          });
        }
        
        getMarkdownFiles(docsDir);
        res.status(200).json({ files });
      } else {
        // 读取指定文件内容，自动添加.md后缀
        let fullPath = path.join(process.cwd(), filePath);
        if (!fullPath.endsWith('.md')) {
          fullPath += '.md';
        }
        
        // 安全检查：确保文件路径在工作目录内
        if (!fullPath.startsWith(process.cwd())) {
          return res.status(403).json({ error: '访问被拒绝' });
        }
        
        try {
          const content = fs.readFileSync(fullPath, 'utf8');
          res.status(200).json({ content });
        } catch (error) {
          console.error('Error reading file:', error);
          res.status(404).json({ error: '文件不存在' });
        }
      }
    } else if (req.method === 'POST') {
      // 检查用户权限
      const session = await getServerSession(req, res, authOptions);
      if (!session?.user?.isAdmin) {
        return res.status(403).json({ error: '需要管理员权限' });
      }

      const { filePath, content } = req.body;
      if (!filePath || !content) {
        return res.status(400).json({ error: '缺少必要参数' });
      }

      // 构建完整的文件路径
      let fullPath = path.join(process.cwd(), filePath);
      if (!fullPath.endsWith('.md')) {
        fullPath += '.md';
      }

      // 安全检查：确保文件路径在工作目录内
      if (!fullPath.startsWith(process.cwd())) {
        return res.status(403).json({ error: '访问被拒绝' });
      }

      try {
        // 确保目录存在
        const dir = path.dirname(fullPath);
        if (!fs.existsSync(dir)) {
          fs.mkdirSync(dir, { recursive: true });
        }

        // 写入文件内容
        fs.writeFileSync(fullPath, content, 'utf8');
        res.status(200).json({ message: '保存成功' });
      } catch (error) {
        console.error('Error saving file:', error);
        res.status(500).json({ error: '保存文件失败' });
      }
    } else {
      res.setHeader('Allow', ['GET', 'POST']);
      res.status(405).end(`Method ${req.method} Not Allowed`);
    }
  } catch (error) {
    console.error('API error:', error);
    res.status(500).json({ error: '服务器内部错误' });
  }
} 